<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta charset="utf-8"/>
		<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
		<title>Введение в язык Python</title>

		<link rel="stylesheet" type="text/css" href="http://moodle.spb.ru/file.php/84/python/standby.css"/><!-- page style: default -->
	</head>
	<body>
		<div class="page">
			<h2>Введение в язык <b>Python</b></h2>
			<p>
				Сегодня мы начинаем изучать язык достаточно молодой и перспективный под названием <b>Python</b> (произносится как «<i>Пайтон</i>» - в честь английской труппы актеров «<i>Монти Пайтон</i>», либо как «<i>Питон</i>» - змея).
			</p>
			<p>
				Мы начнём говорить об основах, фундаментальных синтаксических особенностях языка, узнаем, чем язык Python отличается от тех языков, которыми вы, возможно, уже владеете - <a href="http://ru.wikipedia.org/wiki/Pascal" title="Посмотреть в ВИКИ">Pascal</a>, <a href="http://ru.wikipedia.org/wiki/Си_(язык_программирования)" title="Посмотреть в ВИКИ">C</a> или <a href="http://ru.wikipedia.org/wiki/C++" title="Посмотреть в ВИКИ">C++</a>. Также мы чуть-чуть коснёмся истории развития и возникновения Python’а и попытаемся проникнутся его философией.
			</p>
			<h3>Что такое <b>Python</b>?</h3>
			<p>
				<span title="Определение" class="important"><b>Python</b> - интерпретируемый, объектно-ориентированный высокоуровневый язык программирования с динамической семантикой.</span> Такое определение даёт ему его создатель - голландец <a href="http://ru.wikipedia.org/wiki/Гвидо_ван_Россум" title="Посмотреть в ВИКИ">Гвидо ван Россум</a>.
			</p>
			<p>
				Python появился на свет в начале 90-х годов, и изначально он задумывался как скриптовый язык для автоматизации работы с операционной системой <a href="http://ru.wikipedia.org/wiki/Amoeba_(операционная_система)" title="Посмотреть в ВИКИ">Amoeba</a>, а за основу были взяты такие языки как <a href="http://en.wikipedia.org/wiki/ABC_(programming_language)" title="Посмотреть в ВИКИ">ABC</a> и <a href="http://ru.wikipedia.org/wiki/Модула-3" title="Посмотреть в ВИКИ">Модула-3</a>.
			</p>
			<p>
				Несмотря на данное определение, язык Python поддерживает несколько парадигм программирования, в том числе императивное (Pascal, С), объектно-ориентированное (С++, <a href="http://ru.wikipedia.org/wiki/Java" title="Посмотреть в ВИКИ">Java</a>, <a href="http://ru.wikipedia.org/wiki/C_Sharp" title="Посмотреть в ВИКИ">С#</a>) и функциональное (<a href="http://ru.wikipedia.org/wiki/Lisp" title="Посмотреть в ВИКИ">Lisp</a>, <a href="http://ru.wikipedia.org/wiki/F_Sharp" title="Посмотреть в ВИКИ">F#</a>, <a href="http://ru.wikipedia.org/wiki/Haskell" title="Посмотреть в ВИКИ">Haskell</a>).
			</p>
			<p>
				Как было сказано выше, <span class="important">Python – это интерпретируемый язык</span>, не компилируемый, как С или Pascal.  А это значит, что код программы <b>не</b> компилируется в исполняемый бинарный файл, а выполняется интерпретатором * (то есть интерпретируется) последовательно – от первой до последней команды. Это означает, что для запуска программы, написанной на Python'е, необходим интерпретатор.
			</p>
			<div class="note">
				<p>
					Как вы знаете, программы-компиляторы предназначены для того, чтобы считывать код, написанный программистом, и переводить его в инструкции понятные только машине, то есть в машинный код. Интерпретаторы так не работают - каждая команда, объявление, вызов функции и прочие инструкции, записанные в файле, требуют определённого времени для разбора, проверки на ошибки и другие манипуляции нужные интерпретатору. Конечно, эта разница между работой компилятора и интерпретатора влияет и на производительность, ведь уже скомпилированный файл нужно только выполнить - нет необходимости его проверять или переводить на язык машин. Развитие и широкое распространение интерпретируемых языков связано, в том числе, с развитием аппаратных возможностей компьютеров.
				</p>
			</div>
			<p>
				На данный момент достаточно понимать, что Python - это универсальный язык программирования. Как и все прочие языки программирования, он имеет свои преимущества и недостатки, а также области применения.
			</p>
			<p>
				Вместе с Python'ом предоставляется обширная стандартная библиотека для решения широкого круга задач, а в интернете доступны качественные библиотеки для Python'а по различным предметным областям: средства обработки текстов и для работы с web (http, ftp, почта), обработка изображений, инструменты для создания приложений, механизмы доступа к базам данных, пакеты для научных вычислений, библиотеки построения графического интерфейса и многие другие.
			</p>
			<h3>
				Философия программирования
			</h3>
			<p>
				При написании программ на Python программисты придерживаются определенной философии программирования, называемой «Дзеном Python'а» (The Zen of Python). «Дзен» представляет из себя список заповедей следующего содержания:
			</p>
			<p>
				<ul type="circle">
					<li>Красивое лучше, чем уродливое;</li>
					<li>Явное лучше, чем неявное;</li>
					<li>Простое лучше, чем сложное;</li>
					<li>Сложное лучше, чем запутанное;</li>
					<li>Плоское лучше, чем вложенное;</li>
					<li>Разреженное лучше, чем плотное;</li>
					<li>Читабельность имеет значение.</li>
					<li>Особые случаи не настолько особые, чтобы нарушать правила;</li>
					<li>Хотя практичность побеждает стремление к чистоте;</li>
					<li>Ошибки никогда не должны замалчиваться;</li>
					<li>Если не замалчиваются явно;</li>
					<li>Встретив двусмысленность, отбрось искушение угадать;</li>
					<li>Должен быть один — и, желательно, только один — очевидный способ сделать это;</li>
					<li>Хотя он поначалу может быть и не очевиден, если вы не голландец.</li>
					<li>Сейчас лучше, чем никогда;</li>
					<li>Хотя никогда зачастую лучше, чем прямо сейчас;</li>
					<li>Если реализацию сложно объяснить — идея плоха;</li>
					<li>Если реализацию легко объяснить — идея, возможно, хороша;</li>
					<li>Пространства имён, черт возьми, — отличная штука! Будем делать их побольше!</li>
				</ul>
			</p>
			<p>
				Сейчас эти правила кажутся странными и запутанными, но по мере изучения нами Python'а вы поймете, что ничего сложного здесь нет и что знать их – крайне необходимо. Возможно, что данные указания и рекомендации можно частично или полностью перенести на другие языки программирования.
			</p>
			<h3>
				Средства разработчика
			</h3>
			<p>
				Основное место жительства Python-программиста - официальный сайт языка, который располагается в интернете по адресу <a href="http://python.org/" title="Официальный сайт">http://python.org/</a>. Посетив главную страницу этого сайта, вы обнаружите удобное меню, в котором нас будут интересовать пока что только два пункта - <a href="http://python.org/download/" title="Страница загрузки">Download</a> (здесь можно загрузить необходимые файлы для Python'а) и <a href="http://python.org/doc/" title="Страница просмотра документации">Documentation</a> (подробная, хорошо структурированная документация).
			</p>
			<p>
				Сперва, конечно, посетим страницу загрузки. На момент написания данного текста, эта страница выглядела так:
			</p>
			<img src="http://moodle.spb.ru/file.php/84/python/python-download.png" alt="Страница загрузки Python" title="Страница загрузки"/><!-- python download page -->
			<p>
				Нужно понимать, что процесс разработки и совершенствования языка продолжается непрерывно. Некоторые вносимые изменения исключают обратную совместимость. Это одна из причин, по которой на текущий момент поддерживаются две ветки - 2<i>.x</i> и 3<i>.x</i> (на скриншоте видно, что обе версии доступны для скачивания на странице загрузки). Более подробно о разнице между этими ветками можно посмотреть <a href="http://wiki.python.org/moin/Python2orPython3" title="Python 2 or 3">здесь</a>.
			</p>
			<p>
				Вам необходимо скачать для своей платформы интерпретатор и сопутствующие библиотеки <span class="important">версии 3.2 или выше</span>. В случае, если у вас один из дистрибутивов Unix/Linux, используйте специальную программу-менеджер для установки приложений из репозиториев или портов.
			</p>
			<p>
				После установки вы получаете набор из стандартных библиотек, которые можно использовать при разработке программы; интерпретатор, без которого вы не сможете запустить вашу программу; и специальную программу <b>IDLE</b> (в случае, если у вас ОС Unix/Linux, её нужно устанавливать отдельно). <span class="important" title="Определение">IDLE – Integrated Development Environment, интегрированная среда разработки.</span> Это текстовый редактор, отладчик и интерактивный интерпретатор языка Python. На первых порах мы будем пользоваться именно этой программой.*
			</p>
			<div class="note">
				<p>
					Так же вы можете писать программы на языке Python в любом удобном для вас редакторе текста. Сохраняя файлы с исходным кодом, используя специальное расширение .py, вы сможете запускать их из консоли, просто указав имя этого файла.
				</p>
			</div>
			<p>
				Попробуйте запустить IDLE. Откроется окно интерактивного интерпретатора, который выведет на экран текущие версию Python, версию самой среды разработки и немного сопутствующей информации. После версии среды разработки стоит странная строка, которая начинается с последовательности символов <b>>>></b>. На самом деле, ничего странного в ней нет – она напрямую связана с тем, что мы находимся в интерактивном интерпретаторе. Это своего рода приглашение - мигающий курсор означает, что уже можно вводить код программы, а по нажатию на клавишу <b>Enter</b> введённая строка сразу же будет отправлена интерпретатору на разбор, проверку и выполнение. Практически аналогично работает консоль или терминал в различных системах.
			</p>
			<p>
				Попробуйте ввести следующий код:
				<code>
					<span style="color: #0000FF;">import</span><span style="color: #000000;"> this</span>
				</code>
			</p>
			<p>
				Нажав на клавишу Enter, вы увидите примерно следующее:
			</p>
			<img src="http://moodle.spb.ru/file.php/84/python/python-idle.png" alt="Вид окна программы IDLE" title="Окно программы IDLE (ОС Ubuntu)"/>
			<p>
				Интерпретатор выполнил команду, и результатом ее выполнения является вывод на экран «Дзена Python'а» на английском языке. После чего опять появилось приглашение на ввод новой команды. По началу мы только и будем заниматься тем, что выполнять введённые команды в окне IDLE. Так будет легче понять некоторые особенности языка, как синтаксические, так и технические (устройство интерпретатора, например).
			</p>
			<p>
				Будем считать, что подготовительный этап закончен. Приступим, непосредственно, к изучению самого языка Python.
			</p>
			<h3>
				Алфавит языка <b>Python</b>
			</h3>
			<p>
				В любом языке программирования есть собственный алфавит и набор синтаксических правил, которые нужно соблюдать при написании программ. В случае с языком Python отличий от других уже известных вам языков мало. Если говорить об <b>идентификаторах</b>, то <span class="important">при их именовании можно использовать <u>буквы</u>, <u>цифры</u> и <u>символ нижнего подчёркивания</u>, причём имя должно начинаться с этого символа или буквы, но никак не цифры</span>. Однако, в отличии от многих других языков, <span class="important">Python 3<i>.x</i> в полной мере поддерживает <a href="http://ru.wikipedia.org/wiki/Unicode" title="Посмотреть в ВИКИ">Unicode</a></span>. Это даёт нам возможность использовать в качестве идентификаторов, например, символы кириллицы, однако это считается плохим тоном. Мы будем использовать только латинские буквы при создании идентификаторов и будем требовать этого и от вас.
			</p>
			<p>
				Python, как и другие языки программирования, содержит ряд ключевых и встроенных слов. Список ключевых слов можно узнать, последовательно выполнив две следующие команды:
				<code>
					<span style="color: #0000FF;">import</span><span style="color: #000000;"> keyword<br/>keyword.kwlist</span>
				</code>
			</p>
			<p>
				Как вы понимаете, <span class="important">в качестве идентификаторов <b>нельзя</b> использовать ключевые слова</span>. Встроенные слова - это идентификаторы, используемые для именования встроенных объектов и функций, которые доступны «из коробки». Их можно использовать в качество своих собственных идентификаторов, но этого делать, тем не менее, настоятельно не рекомендуется.
			</p>
			<p>
				Как и язык C, <span class="important">Python является регистрозависимым языком</span>. Это значит, что <cite>abc</cite> и <cite>AbC</cite> - для интерпретатора являются разными именами.
			</p>
			<p>
				Комментарии в Python обозначаются знаком <cite>#</cite>. Начиная от этого символа и до конца строки, все помечается как комментарий. Как и положено, интерпретатор все комментарии игнорирует. Введите после приглашения интерпретатора символ <cite>#</cite> и какой-нибудь текст и нажмите Enter - ничего не произойдет, интерпретатор выведет новое приглашение к вводу команды.
			</p>
			<h3>
				Простые типы данных
			</h3>
			<p>
				<span class="important">Python является языком с динамической типизацией *</span>, что свойственно многим интерпретируемым языкам программирования. Здесь будет некорректно говорить, что переменной определённого типа мы присваиваем какое-либо значение. Лучше будет так: некоторое значение определённого типа мы связываем с именем. Это означает, что <span class="important">тип переменных определяется на этапе выполнения программы</span>, в частности, когда происходит присваивание значения.
			</p>
			<div class="note">
				<p>
					Тут необходимо ещё рассказать о ещё одной особенности языка Python и его интерпретатора. Дело в том, что если в языке C вы сами контролировали работу с памятью, то здесь непосредственно <u>заниматся очисткой не нужно</u> - это сделает за вас специальный <b>сборщик мусора</b> (<i>Garbage Collector</i>). Более подробно о нём будет рассказано в следующих уроках.
				</p>
			</div>
			<p>
				Встроенные типы данных делятся на <u>простые</u> (именно их мы рассмотрим в этом уроке), и на <u>типы-последовательности</u>, о которых мы поговорим позже.
			</p>
			<p>
				Чтобы связать значение любого типа с определённым именем, в языке Python предусмотрена специальная операция - операция присваивания, которая обозначается символом <cite>=</cite> и требует наличия любого идентификатора слева и значения или другого идентификатора справа, например:
				<code>
					<span style="color: #000000;">age </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">20</span><span class="comment"> # Связать с именем 'age' число 20</span>
				</code>
			</p>
			<p>
				Выполнив этот код, интерпретатор свяжет с именем <cite>age</cite> значение <cite>20</cite>. Чтобы убедится в этом, достаточно ввести это имя снова и нажать на Enter - будет выведено значение <cite>age</cite>, то есть число <cite>20</cite>. Далее в коде программы мы уже можем использовать имя <cite>age</cite>, например, в арифметических выражениях. <span class="important">Заметьте, что никаких типов мы не указывали, мы сразу присвоили значение</span>. Далее по ходу программы, тип <cite>age</cite> может меняться. Это означает, что при следующем присваивании этому имени другого значения, интерпретатор автоматически переопределит его тип. Это и есть механизм, называемый динамической типизацией.
			</p>
			<p>
				Давайте теперь перечислим <b>простые типы данных</b>, а затем подробнее их разберём:
				<ul type="circle">
					<li>Булевый (логический) тип - <b>bool</b></li>
					<li>Численные типы - <b>int</b>, <b>float</b>, <b>complex</b></li>
					<li>Специальный тип - <b>NoneType</b></li>
				</ul>
			</p>
			<p>
				<span class="important">Логический тип <b>bool</b></span>. Подтип целочисленного типа для обозначения логических величин. Существует только два значения - истина и ложь. Их литералы записываются как <cite>True</cite> и <cite>False</cite> соответственно. Не забывайте, что Python чувствителен к регистру, а данные литералы начинаются с заглавных букв.
				<code>
					<span style="color: #000000;">thisIsTrue = <span style="color: #0000FF;">True</span><br/>thisIsFalse = <span style="color: #0000FF;">False</span></span>
				</code>
			</p>
			<p>
				<span class="important">Тип <b>int</b></span> представляет целые числа произвольной длины (зависит от объёма оперативной памяти ПК). Поддерживаются различные варианты записи - можно задавать числа в системах счисления с основанием 2, 8, 10 или 16. При использовании двоичных, восьмеричных или шестнадцатеричных чисел, нужно соблюдать определённые правила их написания - они должны <b>всегда</b> начинаться с <cite>0</cite> и буквенного кода системы счисления - <cite>b</cite>, <cite>o</cite> или <cite>x</cite> соответственно:
				<code>
					<span class="comment"># Запись числа 42 в разных системах счисления:</span><br/><span style="color: #000000;">octNum = 0o52<br/>binNum = 0b101010<br/>hexNum = 0x2A<br/>decNum = 42</span>
				</code>
			</p>
			<p>
				Стоит аккуратно использовать числа, записанные в отличных от десятичной системах счисления. <span class="important">Если интерпретатор обнаружит недопустимую цифру или букву (например 8 в восьмеричной записи числа), он выведет ошибку</span>.
			</p>
			<p>
				<span class="important">Тип данных <b>float</b></span> представляет числа с плавающей точкой. Записывается число также, как и в языке C - либо через точку, либо в нотации с экспонентой:
				<code>
					<span style="color: #000000;">pi </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">3.14159265</span><span style="color: #000000;"><br/>d = 6.25e+19<br/>с = 12.5E5<br/>a = -0.5e-12<br/>b = 3.<br/>f = .14</span>
				</code>
			</p>
			<p>
				Тип float в Python соответствует типу данных double в языке C, а это значит, что он ограничен, то есть имеет максимальное и минимальное значение. На данный момент это <cite>1.7976931348623157e+308</cite> и <cite>2.2250738585072014e-308</cite> соответственно, однако эти значения зависят от машины, на которой запущен интерпретатор.
			</p>
			<p>
				<span class="important">Тип данных <b>complex</b></span> позволяет использовать комплексные числа. При этом литерал мнимой части задаётся добавлением <cite>j</cite> в качестве суффикса, то есть перед <cite>j</cite> всегда должно быть число. Примеры комплексных чисел:
				<code>
					<span style="color: #000000;">p = 0 + 1j<br/>s = 2j<br/>e = 1.5 - 0.5j</span>
				</code>
			</p>
			<p>
				Так же стоит отметить, что наличие символа <cite>j</cite> - обязательно, иначе интерпретатор не будет знать, что мы используем комплексное число.
			</p>
			<p>
				<span class="important">Специальный тип данных <b>NoneType</b></span> в своих рядах имеет только одно значение - специальную константу <cite>None</cite>. Её можно использовать для представления отсутствия значения. Как и литералы <cite>True</cite> и <cite>False</cite>, представляющие булевые значения, <cite>None</cite> записывается с большой буквы.
			</p>
			<hr/>
			<p>
				Итак, мы познакомились с простыми типами данных. Далее необходимо рассмотреть операции, которые мы можем осуществлять с каждым из этих типов. Об этом и многом другом мы поговорим в следующем уроке.
			</p>
		</div>
		<div class="footer"></div>
	</body>
</html>